/**
 * @desc: The Task class,via it,you can get The task's
 *         important information, Inc The task's id,name,
 *         ,Auto and so on,and you can get the task's 
 *         Imp-classes too.
 * @author: cxlh
 */
package com.ids.transfer.config;

import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.ids.transfer.data.XmlParse;
import com.ids.transfer.util.DateUtils;
import com.ids.transfer.util.StrCharUtil;

/**
 * The Task class,via it,you can get The task's important information, Inc The
 * task's id,name, ,Auto and so on,and you can get the task's Imp-classes too.
 */
public class TaskConfig {

	protected HashMap properties = new HashMap();
	private StringBuffer sb = new StringBuffer();
	private Log logger = LogFactory.getLog(getClass());
	
	public Map getProperties() {
		return (this.properties);
	}

	/**
	 * 屏蔽原来的构造函数
	 */
	private TaskConfig() {
	}

	/**
	 * 检测合法性
	 * 
	 * @return
	 */
	private boolean check() // 校验TC创建中是否合法
	{
		// 检查任务信息必要的信息是否都已设定
		boolean flag = true;
		if (this.getId().equals("")) {
			sb.append("任务号【ID】属性必须设定");
			return false;
		}
		if (this.getDesds().equals("")) {
			sb.append("目的数据源【DESDS】必须设定");
			return false;
		}
		if (this.getEcmap() == null) {
			sb.append("任务必须对应至少一个以上的实现类");
			return false;
		}
		if (this.getName().equals("")) {
			sb.append("名称必须设定");
			return false;
		}
		return flag;
	}

	/**
	 * 构造函数
	 * 
	 * @param taskid
	 *            任务号
	 */
	public TaskConfig(String taskid) {
		try {
			properties = XmlParse.getTaskInfo(Constant.XMLFILEPATH, taskid);

			if (!check()) {
				logger.error("对象未创建成功，错误原因："+sb.toString());
				System.exit(1);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 贴加属性
	 * 
	 * @param name
	 * @param value
	 */
	public void addProperty(String name, String value) {
		properties.put(name, value);
	}

	/**
	 * 一次性提交的个数
	 * 
	 * @return
	 */
	public String getBatchnum() {
		return (String) this.properties.get("batchnum");
	}

	/**
	 * 目的数据源名称
	 * 
	 * @return
	 */
	public String getDesds() {
		return (String) this.properties.get("desds");
	}

	/**
	 * 所有实现类的配置信息
	 * 
	 * @return 保存在HashMap中
	 */
	public HashMap getEcmap() {
		return (HashMap) this.properties.get("ecmap");
	}

	/**
	 * 定时执行的单位
	 * 
	 * @return
	 */
	public String getUnit() {
		return (String) this.properties.get("unit");
	}

	/**
	 * 定时执行的点时间
	 * 
	 * @return
	 */
	public Date getStarttime() {
		
		return DateUtils.stringToDate(
				(String)this.properties.get("starttime"), 
				"yyyy-MM-dd HH:mm:ss");
	}

	/**
	 * 取得结束时间
	 * @return
	 */
	public Date getEndtime() {
		// TODO Auto-generated method stub
		return DateUtils.stringToDate(
				(String)this.properties.get("endtime"), 
				"yyyy-MM-dd HH:mm:ss");
	}
	
	/**
	 * 返回cron表达式
	 * @return
	 */
	public String getCronexpression(){
		return (String) this.properties.get("cronexpression");
	}
	
	/**
	 * 源数据源名称
	 * 
	 * @return
	 */
	public String getSrcds() {
		return (String) this.properties.get("srcds");
	}

	/**
	 * 最大重抽次数(此参数作保留用)
	 * 
	 * @return
	 */
	public String getMaxretrynum() {
		return (String) this.properties.get("maxretrynum");
	}

	/**
	 * 所属系统
	 * 
	 * @return
	 */
	public String getSystem() {
		return (String) this.properties.get("system");
	}

	/**
	 * 和单位对应的数值
	 * 
	 * @return
	 */
	public String getSpace() {
		return (String) this.properties.get("space");
	}

	/**
	 * 任务名称
	 * 
	 * @return
	 */
	public String getName() {
		return (String) this.properties.get("name");
	}

	/**
	 * 任务号
	 * 
	 * @return
	 */
	public String getId() {
		return (String) this.properties.get("id");
	}

	/**
	 * 实现类数目
	 * 
	 * @return
	 */
	public int getClassnum() {
		Integer ii = (Integer) this.properties.get("classnum");
		return ii.intValue();
	}

	/**
	 * 是否自动
	 * 
	 * @return
	 */
	public boolean isAuto() {
		String auto = StrCharUtil.formatNullStr((String) this.properties
				.get("auto"));
		if (auto.equals("1"))
			return true;
		else
			return false;
	}

	/**
	 * 重载基类的toString函数
	 * 
	 * @return
	 */
	public String toString() {
		StringBuffer sb = new StringBuffer("TASKINFO[");
		Iterator names = properties.keySet().iterator();
		while (names.hasNext()) {
			String name = (String) names.next();
			String value = properties.get(name).toString();
			sb.append(name);
			sb.append('=');
			sb.append(value);
			sb.append(',');
		}
		sb.deleteCharAt(sb.length() - 1);
		sb.append("]");
		return (sb.toString());
	}

	public static void main(String[] args) {
		try {
			TaskConfig tc = new TaskConfig("testTask");
			System.out.print(tc);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	
}